﻿using System;
using System.Collections.Generic;

namespace SocialFront.Providers.Comment
{
    [SectionName("SocialFrontComment")]
    public abstract class CommentBase : SocialFrontProviderBase
    {
        // Data Management
        public abstract Entities.Comment CreateComment(Entities.Comment comment);
        public abstract Entities.Comment UpdateComment(Entities.Comment comment);
        public abstract void DeleteComment(int id);
        public abstract void DeleteComment(Entities.Comment comment);
        public abstract IList<Entities.Comment> GetEntityComments();
        public abstract IList<Entities.Comment> GetEntityComments<T>(Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetEntityComments<T>(int? pageSize, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetEntityComments<T>(int? pageSize, int? page, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetEntityComments<T>(int? pageSize, int? page, out int total, Func<Entities.Comment, T> sortField);


        public abstract IList<Entities.Comment> GetCommentsByMember(int id);
        public abstract IList<Entities.Comment> GetCommentsByMember(Entities.Member member);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(int id, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(Entities.Member member, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(int id, int? pageSize, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(Entities.Member member, int? pageSize, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(int id, int? pageSize, int? page, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(Entities.Member member, int? pageSize, int? page, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(int id, int? pageSize, int? page, out int total, Func<Entities.Comment, T> sortField);
        public abstract IList<Entities.Comment> GetCommentsByMember<T>(Entities.Member member, int? pageSize, int? page, out int total, Func<Entities.Comment, T> sortField);
    }
}